home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2000 March / maximum-cd-2000-03.iso / Quake3 Game Source / Q3AGameSource.exe / Main / ui_spreset.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-18  |  4.1 KB  |  174 lines

  1. /*
  2. =======================================================================
  3.  
  4. RESET MENU
  5.  
  6. =======================================================================
  7. */
  8.  
  9. #include "ui_local.h"
  10.  
  11.  
  12. #define ART_FRAME                    "menu/art/cut_frame"
  13.  
  14. #define ID_NO        100
  15. #define ID_YES        101
  16.  
  17. typedef struct
  18. {
  19.     menuframework_s menu;
  20.     menutext_s        no;
  21.     menutext_s        yes;
  22.     int                slashX;
  23. } resetMenu_t;
  24.  
  25. static resetMenu_t    s_reset;
  26.  
  27.  
  28. /*
  29. =================
  30. Reset_MenuEvent
  31. =================
  32. */
  33. void Reset_MenuEvent(void* ptr, int event) {
  34.     if( event != QM_ACTIVATED ) {
  35.         return;
  36.     }
  37.  
  38.     UI_PopMenu();
  39.  
  40.     if( ((menucommon_s*)ptr)->id == ID_NO ) {
  41.         return;
  42.     }
  43.  
  44.     // reset the game, pop the level menu and restart it so it updates
  45.     UI_NewGame();
  46.     trap_Cvar_SetValue( "ui_spSelection", 0 );
  47.     UI_PopMenu();
  48.     UI_SPLevelMenu();
  49. }
  50.  
  51.  
  52. /*
  53. =================
  54. Reset_MenuKey
  55. =================
  56. */
  57. static sfxHandle_t Reset_MenuKey( int key ) {
  58.     switch ( key ) {
  59.     case K_KP_LEFTARROW:
  60.     case K_LEFTARROW:
  61.     case K_KP_RIGHTARROW:
  62.     case K_RIGHTARROW:
  63.         key = K_TAB;
  64.         break;
  65.  
  66.     case 'n':
  67.     case 'N':
  68.         Reset_MenuEvent( &s_reset.no, QM_ACTIVATED );
  69.         break;
  70.  
  71.     case 'y':
  72.     case 'Y':
  73.         Reset_MenuEvent( &s_reset.yes, QM_ACTIVATED );
  74.         break;
  75.     }
  76.  
  77.     return Menu_DefaultKey( &s_reset.menu, key );
  78. }
  79.  
  80.  
  81. /*
  82. =================
  83. Reset_MenuDraw
  84. =================
  85. */
  86. static void Reset_MenuDraw( void ) {
  87.     UI_DrawNamedPic( 142, 118, 359, 256, ART_FRAME );
  88.     UI_DrawProportionalString( 320, 194 + 10, "RESET GAME?", UI_CENTER|UI_INVERSE, color_red );
  89.     UI_DrawProportionalString( s_reset.slashX, 265, "/", UI_LEFT|UI_INVERSE, color_red );
  90.     Menu_Draw( &s_reset.menu );
  91.  
  92.     UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 0, "WARNING: This resets all of the", UI_CENTER|UI_SMALLFONT, color_yellow );
  93.     UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 1, "single player game variables.", UI_CENTER|UI_SMALLFONT, color_yellow );
  94.     UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 2, "Do this only if you want to", UI_CENTER|UI_SMALLFONT, color_yellow );
  95.     UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 3, "start over from the beginning.", UI_CENTER|UI_SMALLFONT, color_yellow );
  96. }
  97.  
  98.  
  99. /*
  100. =================
  101. Reset_Cache
  102. =================
  103. */
  104. void Reset_Cache( void ) {
  105.     trap_R_RegisterShaderNoMip( ART_FRAME );
  106. }
  107.  
  108.  
  109. /*
  110. =================
  111. UI_ResetMenu
  112. =================
  113. */
  114. void UI_ResetMenu(void) {
  115.     uiClientState_t    cstate;
  116.     int    n1, n2, n3;
  117.     int    l1, l2, l3;
  118.  
  119.     // zero set all our globals
  120.     memset( &s_reset, 0, sizeof(s_reset) );
  121.  
  122.     Reset_Cache();
  123.  
  124.     n1 = UI_ProportionalStringWidth( "YES/NO" );
  125.     n2 = UI_ProportionalStringWidth( "YES" ) + PROP_GAP_WIDTH;
  126.     n3 = UI_ProportionalStringWidth( "/" )  + PROP_GAP_WIDTH;
  127.     l1 = 320 - ( n1 / 2 );
  128.     l2 = l1 + n2;
  129.     l3 = l2 + n3;
  130.     s_reset.slashX = l2;
  131.  
  132.     s_reset.menu.draw       = Reset_MenuDraw;
  133.     s_reset.menu.key        = Reset_MenuKey;
  134.     s_reset.menu.wrapAround = qtrue;
  135.  
  136.     trap_GetClientState( &cstate );
  137.  
  138.     if ( cstate.connState >= CA_CONNECTED ) {
  139.         // float on top of running game
  140.         s_reset.menu.fullscreen = qfalse;
  141.     }
  142.     else {
  143.         // game not running
  144.         s_reset.menu.fullscreen = qtrue;
  145.     }
  146.  
  147.     s_reset.yes.generic.type        = MTYPE_PTEXT;      
  148.     s_reset.yes.generic.flags        = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; 
  149.     s_reset.yes.generic.callback    = Reset_MenuEvent;
  150.     s_reset.yes.generic.id            = ID_YES;
  151.     s_reset.yes.generic.x            = l1;
  152.     s_reset.yes.generic.y            = 264;
  153.     s_reset.yes.string                = "YES";
  154.     s_reset.yes.color                = color_red;
  155.     s_reset.yes.style                = UI_LEFT;
  156.  
  157.     s_reset.no.generic.type            = MTYPE_PTEXT;      
  158.     s_reset.no.generic.flags        = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; 
  159.     s_reset.no.generic.callback        = Reset_MenuEvent;
  160.     s_reset.no.generic.id            = ID_NO;
  161.     s_reset.no.generic.x            = l3;
  162.     s_reset.no.generic.y            = 264;
  163.     s_reset.no.string                = "NO";
  164.     s_reset.no.color                = color_red;
  165.     s_reset.no.style                = UI_LEFT;
  166.  
  167.     Menu_AddItem( &s_reset.menu,    &s_reset.yes );             
  168.     Menu_AddItem( &s_reset.menu,    &s_reset.no );
  169.  
  170.     UI_PushMenu( &s_reset.menu );
  171.  
  172.     Menu_SetCursorToItem( &s_reset.menu, &s_reset.no );
  173. }
  174.